package me.flyray.bsin.domain.enums;

import com.fasterxml.jackson.annotation.JsonCreator;

/**
 * @author bolei
 * @date 2023/6/29 15:43
 * @desc 品牌商户发行资产类型，与 S11e Protocol 合约中的 AssetsType 枚举对应
 * 
 * 协议映射关系（与 IS11eProfile.AssetsType 一致）：
 * 1、pass卡 (PASSCARD)
 * 2、数字积分 (DP)
 * 3、PFP
 * 4、数字徽章 (BADGE)
 * 5、出勤证明 (POAP)
 * 6、数字门票 (TICKET)
 */
public enum AssetsCollectionType {

    /**
     * pass卡 (PASSCARD) - ERC-721, 支持 ERC6551
     */
    PASS_CARD("1", "pass卡"),
    /**
     * 数字积分 (DP/DigitalPoints) - ERC-20
     */
    DIGITAL_POINT("2", "数字积分"),
    /**
     * PFP - ERC-721（计划中）
     */
    PFP("3", "PFP"),
    /**
     * 数字徽章 (BADGE) - ERC-1155
     */
    DIGITAL_BADGE("4", "数字徽章"),
    /**
     * 出勤证明 (POAP) - ERC-1155, Soulbound
     */
    POAP("5", "出勤证明"),
    /**
     * 数字门票 (TICKET) - ERC-721, 支持 ERC6551
     */
    DIGITAL_TICKETS("6", "数字门票"),
    /**
     * 账户-联合曲线BC
     */
    ACCOUNT_BC("7", "账户-联合曲线BC"),
    /**
     * 优惠券
     */
    DISCOUNT("8", "优惠券"),
    /**
     * 权限
     */
    AUTHORITY("9", "权限");

    private String code;

    private String desc;

    AssetsCollectionType(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    AssetsCollectionType(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    /**
     * Json 枚举序列化
     */
    @JsonCreator
    public static AssetsCollectionType getInstanceById(String id) {
        if (id == null) {
            return null;
        }
        for (AssetsCollectionType status : values()) {
            if (id.equals(status.getCode())) {
                return status;
            }
        }
        return null;
    }

}
